package LinkedListTest;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;

// import java.util.*
// 命名空间中的 * 代表通配符，泛指任意、所有
public class Main {

    public static void main(String[] args) {
	// write your code here
        //创建一个空链表 a,里面用来准备存放字符串
        List<String> a = new LinkedList<>();
        // 向 a 中添加三个项
        a.add("韩梅");
        a.add("李雷雷");
        a.add("康康");

        //再创建一个空链表，向其中加入四项
        List<String> b = new LinkedList<>();
        b.add("萧峰");
        b.add("虚竹");
        b.add("段誉");
        b.add("王重阳");

        // 定义一个 ListIterator
        ListIterator<String> aIter =a.listIterator();
        // 定义一个 Iterator
        Iterator<String> bIter = b.iterator();

        //枚举器对象两个常用方法
        // 1. next() 获取下一项，并且把指针向后移动一项
        // 2. hasNext() 返回bool值，最后一项时返回假

        // 使用枚举器将 b 间隔插入 a
        while(bIter.hasNext()){
            if(aIter.hasNext())
            {
                aIter.next();
            }
            aIter.add(bIter.next());
        }

        System.out.println(a);

        // 因为刚才已经将两个枚举器读到列表的尾部
        // 需要还原到顶部，重新给枚举器赋一下值
        // 重新将枚举器的指针还原到链表的开始位置
        bIter = b.iterator();

        // 间隔删除2/4两项
        while (bIter.hasNext())
        {
            bIter.next();
            if (bIter.hasNext())
            {
                bIter.next();
                bIter.remove();
            }
        }

        System.out.println(b);

        // 移除a 中 b 所包含的项
         

        System.out.println(a);

        List<String> ll = new LinkedList<>() ;
//通过 add 方法添加新项
//add 方法会将新项添加到链表的末尾
        ll.add("a");
        ll.add("b");
        ll.add("c");
// 可以创建 List 的 iterator
        ListIterator liter = ll.listIterator();
// 通过 iterator 的 next() 方法访问下一项
// 并返回当前项
// x 会获取到 "a"
        String x = (String) liter.next();
// 可通过 iterator 的 add() 方法插入新项到当前位置
// 执行完下面语句的 linkedlist ll 为：
// a 1 b c
        liter.add("1");
        System.out.println(ll);
        String y=(String)liter.next();
        System.out.println("y="+y);
        liter.remove();
        System.out.println(ll);
        liter.next();
        liter.remove();
        System.out.println(ll);
    }
}
